/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Utilidades;

import Entidades.Producto;
import SessionBeans.ProductosDAO;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class CSV {

    private boolean error = false;
    private String errorMsg;
    private String file;
    private String delimitador;
    private ProductosDAO productosDAO;

    public CSV(String file, String delimitador, ProductosDAO productosDAO) {
        this.file = file;
        this.delimitador = delimitador;
        this.productosDAO = productosDAO;
        try {
            this.error = !this.parsear();
        } catch (Exception e) {
            this.errorMsg = e.getMessage();
            this.error = true;
        }
    }

    private boolean isInt(String s) {
        try {
            Integer.parseInt(s);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    private boolean isDouble(String s) {
        try {
            Double.parseDouble(s);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    private boolean parsear() throws FileNotFoundException, IOException {
        FileReader fr = new FileReader(file);
        BufferedReader bf = new BufferedReader(fr);
        bf.readLine(); //saltar header
        String s;
        String[] aux;
        //ID - NOMBRE - DESCRIPCIÓN - PRECIO - STOCK
        int fila = 1;

        int id, stock;
        double precio;

        Producto producto;
        String prueba;
        while ((s = bf.readLine()) != null) {
            fila++;
            prueba = "";
            for (int i =0; i<s.length();i++) {
                if (s.charAt(i) != '"') {
                    prueba += s.charAt(i);
                }
            }
            s = prueba;

            aux = s.split(delimitador);
            if (aux.length != 5) {
                this.errorMsg = "La fila " + fila + " está mal formada";
                return false;
            }
            
            if (!this.isInt(aux[0]) || !this.isInt(aux[4]) || !this.isDouble(aux[3])) {
                this.errorMsg = "La fila " + fila + " está mal formada";
                return false;
            }

            id = Integer.parseInt(aux[0]);
            precio = Double.parseDouble(aux[3]);
            stock = Integer.parseInt(aux[4]);
            producto = productosDAO.getProducto(id);
            producto.setDescripcion(aux[2]);
            producto.setNombre(aux[1]);
            producto.setPrecio(precio);
            producto.setStock(stock);
            productosDAO.actualizar(producto);
        }
        return true;
    }

    public boolean error() {
        return this.error;
    }

    /**
     * @return the errorMsg
     */
    public String getErrorMsg() {
        return errorMsg;
    }
}
